package co.edu.poli.ficb.agl.automatable.modelo.automatas;

import java.util.Set;

import co.edu.poli.ficb.agl.automatable.modelo.Simbolo;

/**
 * 
 * @author Diego David Satoba Castro
 * @version 0.1 26/07/11
 * @since 0.1
 *
 */
public abstract class AutomataFinito implements Automata {
	
	@Override
	public boolean isEstadoDeAceptacion(Estado estado) {
		return getEstadosAceptacion().contains(estado);
	}
	
	@Override
	public boolean isEstadoInicial(Estado estado) {
		return getEstadoInicial().equals(estado);
	}
	
	@Override
	public Set<Estado> transicion(Estado e, Simbolo s) {
		return getFuncionDeTransicion().transicion(e, s);
	}
	
	@Override
	public Estado transicionDeterminista(Estado e, Simbolo s) {
		Set<Estado> estados = transicion(e, s);
		if (estados.isEmpty())
			return null;
		else
			return estados.iterator().next();
	}
	
	@Override
	public void agregarTransicion(Estado estadoFuente, Simbolo simbolo,
			Estado estadoDestino) {
		getFuncionDeTransicion().agregarTransicion(estadoFuente, simbolo, estadoDestino);
	}
	
	@Override
	public boolean agregarEstado(Estado estado) {
		return getEstados().add(estado);
	}
	
	@Override
	public boolean agregarEstadoAceptacion(Estado estado) {
		return getEstadosAceptacion().add(estado);
	}
	
}
